package data

import (
	"gitee.com/small_fish_official_net/beego_frame/bash"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/orm"
)

// 公共表字段
type Data struct {
	CteateTime int64 `json:"create_time"` // 创建时间
	UpdateTime int64 `json:"-"`           // 修改时间
}

// 添加前置选项，自动初始化时间戳
func (c *Data) InsertPrivate() *Data {
	c.CteateTime = bash.DateTime()
	c.UpdateTime = bash.DateTime()
	return c
}

func DataInit() {
	logs.Info("开始注册数据库")
	orm.RegisterDriver("mysql", orm.DRMySQL)
	orm.RegisterModel(new(User))
	orm.RegisterModel(new(Menu))
	orm.RegisterModel(new(Group))
	db_list := []string{"default", "write", "read"}
	for _, v := range db_list {
		orm.RegisterDataBase(v, "mysql", beego.AppConfig.String("db::"+v))
		// 最大连接数
		if temp, err := beego.AppConfig.Int("db::k_count"); err != nil && temp > 0 {
			orm.SetMaxIdleConns(v, temp)
		}
		if temp, err := beego.AppConfig.Int("db::a_count"); err != nil && temp > 0 {
			orm.SetMaxOpenConns(v, temp)
		}
		if temp, err := beego.AppConfig.Int("db::" + v + "_k_count"); err != nil && temp > 0 {
			orm.SetMaxIdleConns(v, temp)
		}
		if temp, err := beego.AppConfig.Int("db::" + v + "_a_count"); err != nil && temp > 0 {
			orm.SetMaxOpenConns(v, temp)
		}
	}
	// 开启自动建表
	if status, err := beego.AppConfig.Bool("debug"); err == nil && status {
		orm.RunSyncdb("write", true, true)
	} else {
		orm.RunSyncdb("write", false, false)
	}
	logs.Info("数据库注册完成")
	logs.Info("开始检测是否需要插入数据")
	init_data()
	logs.Info("数据检测完成")
}
